package com.rockbb.common.sso.session;

import java.util.Collection;
import java.util.List;

/**
 * @author Administrator
 *
 */
public interface SessionMap 
{
	public void initialise();
	public void reset();

	public Collection<String> getKeys();
	public List<Session> getSessions(Collection<String> keysList);
	public int cleanUp();
	public int size();

	/**
	 * 根据sid提取session池中存放的session
	 * 
	 * @param sid
	 * @return
	 */
	public Session get(String sid);

	/**
	 * 供外部添加新session的方法. 仅供client application同步session时使用
	 * 
	 * @param sid
	 * @param session
	 */
	public void put(String sid, Session session);

	/**
	 * 删除session. 当session被伪造(如ip, agent不对应), 或session超时时, 删除session
	 * 
	 * @param sid
	 * @return
	 */
	public void remove(String sid);

	/**
	 * 根据提供的参数创建session
	 * 
	 * @param user_id
	 * @param browser
	 * @param ip
	 * @param persistent
	 * @return
	 */
	public Session createSession(long uuid, String browser, String ip, boolean persistent);

	/**
	 * 重置session, 当用户退出时, 将session重置为匿名session
	 * 
	 * @param sid
	 */
	public void resetSession(String sid);

	/**
	 * 更新token, 供生成验证码时使用
	 * 
	 * @param sid
	 */
	public void resetSessionToken(String sid);

	/**
	 *更新session至当前时间 , 当前IP(允许IP更换时)
	 * 
	 * @param sid
	 */
	public void renewSession(String sid, String ip);

	/**
	 * 将指定session绑定至指定用户
	 * 
	 * @param sid
	 * @param uuid
	 * @param autologin
	 */
	public void updateSessionUser(String sid, long uuid, int autologin);

	/**
	 * 将session时间设置为失效时间: session_time减去最大有效时间
	 * 
	 * @param sid
	 */
	public void expireSession(String sid);
}
